@echo off
chcp 65001
title 云打印应用 - 打包并安装Windows服务

echo ===== 云打印应用打包与服务安装工具 =====
echo.

:: 检查管理员权限
net session >nul 2>&1
if %errorlevel% neq 0 (
    echo 错误: 请以管理员身份运行此脚本!
    echo 请右键点击此批处理文件并选择"以管理员身份运行"。
    pause
    exit /b 1
)

:: 设置环境变量
set "BUILD_DIR=dist\cloud_print_service"
set "SERVICE_NAME=CloudPrintService"
set "APP_EXE=%CD%\dist\cloud_print_service\cloud_print_service.exe"

echo 第1步: 清理旧的构建目录...
:: 终止可能正在运行的进程
taskkill /f /im cloud_print_service.exe >nul 2>&1
taskkill /f /im cloud_print_app.exe >nul 2>&1
timeout /t 2 >nul

:: 停止和删除旧的服务
echo 停止和删除旧的服务(如果存在)...
sc stop %SERVICE_NAME% >nul 2>&1
timeout /t 2 >nul
sc delete %SERVICE_NAME% >nul 2>&1
timeout /t 2 >nul

:: 删除旧的构建目录
if exist "dist" (
    rmdir /s /q "dist" >nul 2>&1
    if exist "dist" (
        echo 警告: 无法删除旧的构建目录，请检查是否有程序正在使用这些文件。
        echo 您可能需要重新启动计算机后再尝试。
        pause
        exit /b 1
    )
)

if exist "build" (
    rmdir /s /q "build" >nul 2>&1
)

echo 第2步: 使用PyInstaller打包应用...
:: 检查是否安装了PyInstaller
python -c "import PyInstaller" >nul 2>&1
if %errorlevel% neq 0 (
    echo 正在安装PyInstaller...
    pip install pyinstaller
    if %errorlevel% neq 0 (
        echo 错误: 无法安装PyInstaller。
        pause
        exit /b 1
    )
)

:: 执行打包
echo 正在打包app_service.py为可执行文件...
python -m PyInstaller service_app.spec
if %errorlevel% neq 0 (
    echo 错误: PyInstaller打包失败。
    pause
    exit /b 1
)

:: 检查是否成功生成了可执行文件
if not exist "%APP_EXE%" (
    echo 错误: 未生成可执行文件 %APP_EXE%
    pause
    exit /b 1
)

echo 第3步: 创建并安装Windows服务...
echo 正在安装Windows服务: %SERVICE_NAME%

:: 使用SC命令创建服务
sc create %SERVICE_NAME% binPath= "\"%APP_EXE%\"" DisplayName= "云打印应用服务" start= auto
if %errorlevel% neq 0 (
    echo 错误: 无法创建Windows服务。
    echo 可能的原因：服务名称已存在或没有足够的权限。
    pause
    exit /b 1
)

:: 设置服务描述
sc description %SERVICE_NAME% "提供云打印应用的Web界面和后台服务"
if %errorlevel% neq 0 (
    echo 警告: 无法设置服务描述。
)

:: 创建必要的目录
if not exist "%BUILD_DIR%\logs" (
    mkdir "%BUILD_DIR%\logs" >nul 2>&1
)
if not exist "%BUILD_DIR%\print_status" (
    mkdir "%BUILD_DIR%\print_status" >nul 2>&1
)
if not exist "%BUILD_DIR%\watch_folder" (
    mkdir "%BUILD_DIR%\watch_folder" >nul 2>&1
)

:: 启动服务
echo 第4步: 启动服务...
net start %SERVICE_NAME%
if %errorlevel% neq 0 (
    echo 警告: 服务安装成功，但无法自动启动。
    echo 您可以手动从服务管理控制台启动它。
) else (
    echo 服务已成功启动!
)

echo.
echo ===== 安装完成 =====
echo.
echo 服务名称: %SERVICE_NAME%
echo 可执行文件: %APP_EXE%
echo.
echo 您可以通过以下命令控制服务:
echo   启动: net start %SERVICE_NAME%
echo   停止: net stop %SERVICE_NAME%
echo   状态: sc query %SERVICE_NAME%
echo.
echo 服务已配置为自动启动，系统重启后将自动运行。
echo.

pause 